package beans.cadastro.financeiro;

import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.faces.component.UICommand;
import javax.persistence.EntityExistsException;
import javax.persistence.Query;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import pojo.cadastro.financeiro.FormaPagamento;

public class FormaPagamentoBean {

    @PersistenceContext
    private EntityManager mgr;

    // pojo
    private long id;
    private String descricao;
    private int parcelasPermitidas;
    private boolean baixaAutomatica;

    // Campos de Pesquisa
    private String descricaoPesq;

    // listas
    private List<FormaPagamento> listaFormaPagamentos;

    // botoes de comandos
    private UICommand btnAlterar;
    private UICommand btnExcluir;

    public FormaPagamentoBean() {
    }

    public String pesquisar() {
        carregar();
        return "pesquisa";
    }

    public String retornar() {
        return "pesquisa";
    }

    public String carregar() {

        listaFormaPagamentos = Collections.EMPTY_LIST;
        String sql = "SELECT fp FROM FormaPagamento fp WHERE fp.id IS NOT NULL ";
        if (!this.descricaoPesq.equals(""))
            sql += "AND fp.descricao LIKE :descricaoPesq ";
        sql += "ORDER BY fp.descricao";

        mgr = Persistence.createEntityManagerFactory("lojaPU").createEntityManager();
        Query q1 = mgr.createQuery(sql);

        if (!this.descricaoPesq.equals(""))
            q1.setParameter("descricaoPesq", "%"+this.descricaoPesq+"%");

        listaFormaPagamentos = q1.getResultList();
        mgr.close();

        return null;
    }

    public String salvar() {
        FormaPagamento fp = new FormaPagamento();

        if (id != 0) {
            fp.setId(id);
        }

        fp.setDescricao(this.descricao);
        fp.setParcelasPermitidas(parcelasPermitidas);
        fp.setBaixaAutomatica(baixaAutomatica);
        fp.setDataCadastro(new Date(System.currentTimeMillis()));

        mgr = Persistence.createEntityManagerFactory("lojaPU").createEntityManager();
        mgr.getTransaction().begin();
        try {
            if (fp.getId() == 0) {
                mgr.persist(fp);
            } else {
                mgr.merge(fp);
            }
            mgr.getTransaction().commit();
        } catch (EntityExistsException e) {
            mgr.getTransaction().rollback();
        } finally {
            mgr.close();
        }

        listaFormaPagamentos = Collections.EMPTY_LIST;

        return "pesquisa";
    }

    public String incluir() {
        id = 0;
        descricao = "";
        parcelasPermitidas = 1;
        baixaAutomatica = false;

        return "cadastro";
    }

    public String alterar() {
        mgr = Persistence.createEntityManagerFactory("lojaPU").createEntityManager();
        FormaPagamento fp = mgr.find(FormaPagamento.class, Long.parseLong(btnAlterar.getValue().toString()));

        id = fp.getId();
        descricao = fp.getDescricao();
        parcelasPermitidas = fp.getParcelasPermitidas();
        baixaAutomatica = fp.isBaixaAutomatica();
        
        return "cadastro";
    }

    public String excluir() {
        mgr = Persistence.createEntityManagerFactory("lojaPU").createEntityManager();
        FormaPagamento fp = mgr.find(FormaPagamento.class, Long.parseLong(btnExcluir.getValue().toString()));

        mgr.getTransaction().begin();
        try {
            mgr.remove(fp);
            mgr.getTransaction().commit();
        } catch (EntityExistsException e) {
            mgr.getTransaction().rollback();
        } finally {
            mgr.close();
        }
        carregar();

        return null;
    }

    // Getters and Setters
    
    public UICommand getBtnAlterar() {
        return btnAlterar;
    }

    public void setBtnAlterar(UICommand btnAlterar) {
        this.btnAlterar = btnAlterar;
    }

    public UICommand getBtnExcluir() {
        return btnExcluir;
    }

    public void setBtnExcluir(UICommand btnExcluir) {
        this.btnExcluir = btnExcluir;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public int getParcelasPermitidas() {
        return parcelasPermitidas;
    }

    public void setParcelasPermitidas(int parcelasPermitidas) {
        this.parcelasPermitidas = parcelasPermitidas;
    }

    public boolean isBaixaAutomatica() {
        return baixaAutomatica;
    }

    public void setBaixaAutomatica(boolean baixaAutomatica) {
        this.baixaAutomatica = baixaAutomatica;
    }
    
    public String getDescricaoPesq() {
        return descricaoPesq;
    }

    public void setDescricaoPesq(String descricaoPesq) {
        this.descricaoPesq = descricaoPesq;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public List<FormaPagamento> getListaFormaPagamentos() {
        return listaFormaPagamentos;
    }

    public void setListaFormaPagamentos(List<FormaPagamento> listaFormaPagamentos) {
        this.listaFormaPagamentos = listaFormaPagamentos;
    }

}